#include <fstream> 
#include <life/lifepoly/jacobi.hpp>
//#include <life/lifepoly/legendre.hpp>

#include <life/lifepoly/im.hpp>

#include <life/lifepoly/equispaced.hpp>
#include <life/lifepoly/gausslobatto.hpp>
#include <life/lifepoly/moment.hpp>
#include <life/lifepoly/legendre.hpp>



#include <math.h>
#include <sstream>
using namespace Life;


template<uint N>
void run() {

  PointSetEquiSpaced<Life::Simplex<1,1,1>,N,double> equi_Pts;
  GaussLobatto<Life::Simplex<1,1,1>,N,double> gaussLobatto_Pts;

  Moment<1,N,double> moment_base;
  Legendre<1,N,Normalized<true>,double> legendre_base;

  ublas::matrix<double> mat1(moment_base.evaluate(equi_Pts.points()));
  ublas::matrix<double> mat2(moment_base.evaluate(gaussLobatto_Pts.points()));
  ublas::matrix<double> mat3(legendre_base.evaluate(equi_Pts.points()));
  ublas::matrix<double> mat4(legendre_base.evaluate(gaussLobatto_Pts.points()));
 
  std::ostringstream Nstring;Nstring << N;
  
  std::string name1("moment_equi_"+Nstring.str()+".txt" );
  std::string name2("moment_lobato_"+Nstring.str()+".txt" );
  std::string name3("legendre_equi_"+Nstring.str()+".txt" );
  std::string name4("legendre_lobato_"+Nstring.str()+".txt" );
  
  std::ofstream fichier1,fichier2,fichier3,fichier4;

  fichier1.open(name1.c_str(), std::ios::out); //on ouvrre le fichier en ecriture
  fichier2.open(name2.c_str(), std::ios::out);
  fichier3.open(name3.c_str(), std::ios::out);
  fichier4.open(name4.c_str(), std::ios::out);

  for (uint i=0;i<mat1.size1();++i) {
    for (uint j=0;j<mat1.size2();++j) {
      fichier1 << mat1(i,j) <<" ";
      fichier2 << mat1(i,j) <<" ";
      fichier3 << mat1(i,j) <<" ";
      fichier4 << mat1(i,j) <<" ";
    }
    fichier1 << "\n";
    fichier2 << "\n";
    fichier3 << "\n";
    fichier4 << "\n";
  }

  fichier1.close();
  fichier2.close();
  fichier3.close();
  fichier4.close();


}

int main(int argc, char** argv )
{


  run<3>();

  return 0;

}
